package main.java.sq;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import main.java.utiles.InterfazUsuario;

public class Planeta {
	//TODO constructor en todas las clases incializando los atributos a un estado por si acaco
	//Asi nos evitamos errores inesperados
	
	// El id del jugador que ha usado privilego;
	private Jugador privilegioUsadoPor;

	/**
	 * @uml.property name="alien"
	 */
	private Boolean alien;

	/**
	 * Getter of the property <tt>alien</tt>
	 * 
	 * @return Returns the alien.
	 * @uml.property name="alien"
	 */
	public Boolean isAlien() {
		return alien;
	}

	/**
	 * Setter of the property <tt>alien</tt>
	 * 
	 * @param alien
	 *            The alien to set.
	 * @uml.property name="alien"
	 */
	public void setAlien(Boolean alien) {
		this.alien = alien;
	}

	/**
	 * @uml.property name="minerales" multiplicity="(0 -1)" dimension="1"
	 */
	private List<Minerales> minerales;

	/**
	 * Getter of the property <tt>minerales</tt>
	 * 
	 * @return Returns the minerales.
	 * @uml.property name="minerales"
	 */
	public List<Minerales> getMinerales() {

		return minerales;
	}

	/**
	 * Setter of the property <tt>minerales</tt>
	 * 
	 * @param minerales
	 *            The minerales to set.
	 * @uml.property name="minerales"
	 */
	public void setMinerales(List<Minerales> minerales) {

		this.minerales = minerales;
	}

	/**
	 * @uml.property name="privilegio"
	 */
	private Privilegio privilegio;

	/**
	 * Getter of the property <tt>privilegio</tt>
	 * 
	 * @return Returns the privilegio.
	 * @uml.property name="privilegio"
	 */
	public Privilegio getPrivilegio() {
		return privilegio;
	}

	/**
	 * Setter of the property <tt>privilegio</tt>
	 * 
	 * @param privilegio
	 *            The privilegio to set.
	 * @uml.property name="privilegio"
	 */
	public void setPrivilegio(Privilegio privilegio) {
		this.privilegio = privilegio;
	}

	/**
		 */
	public void descubrirPlaneta() {
	}

	/**
			 */
	public void hayenemigos() {
	}
	/*private boolean hayaliens;
	
	public boolean hayAliens() {
		return hayaliens;
	}
*/
	/**
					 */
	public void invasionAlien() {
	}

	/**
						 */
	public void invasion() {
	}

	/**
	 * @uml.property name="id"
	 */
	private int id;

	/**
	 * Getter of the property <tt>id</tt>
	 * 
	 * @return Returns the id.
	 * @uml.property name="id"
	 */
	public int getId() {
		return id;
	}

	/**
	 * Setter of the property <tt>id</tt>
	 * 
	 * @param id
	 *            The id to set.
	 * @uml.property name="id"
	 */
	public void setId(int id) {
		this.id = id;
	}

	public void ejecutaPrivilegio() {
		Privilegio pr=getPrivilegio();
		Partida partida = Partida.getPartida();
		Jugador jugadorActual = partida.getJugadorActual();
		Accion accion = null;
		if(pr==Privilegio.Colonia_Minera){
			accion=new ColoniaMinera();
		}
		if(pr==Privilegio.Mercado){
			accion=new Mercado();
		}
		if(pr==Privilegio.Consul){
			accion=new Movilizacion();
		}
		if(pr==Privilegio.Alien){
			List<Privilegio> l = new ArrayList<Privilegio>();
			l.add(0,Privilegio.Colonia_Minera);
			l.add(1,Privilegio.Mercado);
			l.add(2,Privilegio.Consul);
			Privilegio pri = (Privilegio) InterfazUsuario.seleccionaObjeto(l);
			pr=pri;
			ejecutaPrivilegio();
		}
		if(pr==Privilegio.PV){
			Collection<Nave> navesDeJugador = partida.getSistema().getCasillaPorID(getIdCasilla()).getNave();
			for(Nave nave : navesDeJugador){
				if(nave.getNave()==TipoNave.Corbeta || nave.getNave()==TipoNave.Destructor){
					jugadorActual.addPuntoVictoria();
				}
			}
		}
		if(accion!=null){
			accion.setIdJugador(jugadorActual.getId());
			accion.ejecutarAccion();
		}
	}

	/**
	 * @uml.property name="mercado"
	 */
	private boolean mercado;

	/**
	 * Getter of the property <tt>mercado</tt>
	 * 
	 * @return Returns the mercado.
	 * @uml.property name="mercado"
	 */
	public boolean isMercado() {
		return mercado;
	}

	/**
	 * Setter of the property <tt>mercado</tt>
	 * 
	 * @param mercado
	 *            The mercado to set.
	 * @uml.property name="mercado"
	 */
	public void setMercado(boolean mercado) {
		this.mercado = mercado;
	}

	/**
	 * @uml.property name="idCasilla"
	 */
	private int idCasilla;

	/**
	 * Getter of the property <tt>idCasilla</tt>
	 * 
	 * @return Returns the idCasilla.
	 * @uml.property name="idCasilla"
	 */
	public int getIdCasilla() {
		return idCasilla;
	}

	/**
	 * Setter of the property <tt>idCasilla</tt>
	 * 
	 * @param idCasilla
	 *            The idCasilla to set.
	 * @uml.property name="idCasilla"
	 */
	public void setIdCasilla(int idCasilla) {
		this.idCasilla = idCasilla;
	}

	public void setPrivilegioUsadoPor(Jugador jug) {
		privilegioUsadoPor = jug;
	}

	
	public Jugador getPrivilegioUsadoPor() {
		return privilegioUsadoPor;
	}

	public String toString() {
		String mensaje = getNombre() + ". Privilegio: "+ getPrivilegio() + ".";
		return mensaje;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNombre() {
		return nombre;
	}

	private String nombre;
}
